*! version 1.0.0 18mar2009 Rodrigo Martell
version 10.1
program define switch
syntax anything, CAses(str) VALues(str)

	**determine number of cases
	local no_cases=wordcount("`cases'")
	**determine number of values
	local no_values=wordcount("`values'")
	
	**Error trapping
	
	**complain if number of cases and values don't equate.
	if `no_cases'!=`no_values'|`no_cases'==0 | `no_values'==0{
		di "The number of cases and values doesn't match, or you haven't entered any cases or values."		
		exit
	}
	
	**complain if more than one arguments are passed
	if wordcount("`anything'")>1{
		di "You may only supply one case to match to a value at a time."		
		exit
	}		
	

	**Execute switching
	local result=0
	forvalues i=1/`no_cases'{		
		tokenize `cases'
		if "`anything'"=="``i''"{
			tokenize `values'
			local switch_return="``i''"
			local result=1
			di "switch matched `anything' to a value of `switch_return'"
			exit
		}
	}

	**report when finished
	if `result'==0{
		local switch_return="no_swatch"
		di "switch found no matching value for `anything'"
	}

		
end
